home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Science / MAL ©P.f.Howden 1⁄1⁄89 / FOURIER PLOT < prev    next >
Text File  |  1988-02-09  |  3KB  |  46 lines

  1. 5 CLS:CLEAR:PRINT"FAST FOURIER TRANSFORM . {RUN LINE 230 for quick entry of REAL  TIME data}"
  2. 7 PRINT"Freq Data are the Coefficients A(N),B(N) of COS(NwT),SIN(NwT)."
  3. 10 W1=495:W1=W1-15:W2=293:'Set horizontal/vertical pixels resp.
  4. 15 INPUT "PLOT DATA (1/0)?=";D1
  5. 20 INPUT "NUMBER OF DATA POINTS(4,8,16...64.)=";A:Y=A
  6. 30 Y=Y/2:IF Y>1 THEN 30
  7. 40 IF Y<>1 THEN PRINT"NUMBER OF POINTS MUST=POWER OF 2.TRY AGAIN":GOTO 20
  8. 50 DIM A(2*A),B(2*A):PRINT"MENU: 1= TIME->FREQUENCY :";:INPUT "-1= FREQUENCY->TIME DOMAIN :=";D
  9. 60 B=1:C=1:GOSUB 130:I=1:FOR K=1 TO A-2:J=A
  10. 70 IF I>K THEN E=K:F=I:G=A(E):A(E)=A(F):A(F)=G:H=A(E+A):A(E+A)=A(F+A):A(F+A)=H
  11. 80 J=J/2:IF J<I THEN I=I-J:GOTO 80
  12. 90 I=I+J:NEXT K:FOR K=1 TO A/2:E=A-2*K:FOR J=1 TO K:B=(J-1)*D*3.141593#/K:C=COS(B):B=SIN(B)
  13. 100 FOR I=J TO (J+E) STEP (2*K):F=I+K:G=C*A(F)-B*A(F+A):H=C*A(F+A)+B*A(F):A(F)=A(I)-G
  14. 110 A(F+A)=A(I+A)-H:A(I)=A(I)+G:A(I+A)=A(I+A)+H:NEXT I:NEXT J:K=2*K-1:NEXT K:D=-D:B=1
  15. 120 IF D<0 THEN B=A
  16. 130 IF D>0 THEN PRINT"TIME DATA:"
  17. 140 IF D<0 THEN PRINT"FREQUENCY DATA:"
  18. 150 FOR K=1 TO A:J=K+A
  19. 160 IF C<0 THEN 170
  20. 163 PRINT"REAL #";K-1;:INPUT "=";A(K):PRINT"IMAG #";K-1;:INPUT "=";A(J)
  21. 165 B(K)=A(K):B(J)=A(J):IF D<0 AND K>1 THEN A(K)=A(K)/2:A(J)=A(J)/2
  22. 167 GOTO 190
  23. 170 A(K)=A(K)/B:A(J)=A(J)/B:IF D<0 AND K>1 THEN A(K)=A(K)*2:A(J)=A(J)*2
  24. 180 PRINT"REAL #";K-1;"=";A(K);TAB(32);"IMAG #";K-1;"=";A(J)
  25. 190 NEXT K:IF C>0 THEN RETURN
  26. 200 IF D1=1 THEN INPUT "PRESS RETURN TO CONTINUE";C$:CLS:W=W2/3:Z=2:GOSUB 205:LOCATE 17:PRINT"Results":W=2*W:D=-D:Z=18:GOSUB 205
  27. 202 INPUT "PRESS RETURN TO END";C$:END
  28. 205 B0=ABS(B(1)):FOR K=2 TO 2*A:IF ABS(B(K))>B0 THEN B0=ABS(B(K)):'PLOTTING DATA/RESULTS
  29. 210 NEXT K:LOCATE Z:IF D<0 THEN PRINT"Time Values['L' on plot line=Imag value]. ";A;"ordinates,largest=";B0:GOTO 215
  30. 213 PRINT"Freq Values(D.C. value first). ";A;"ordinates,largest=";B0
  31. 215 LINE (5,W)-(W1+5,W):FOR K=1 TO A:J=K+A:LINE (W1*(K-1)/(A-1)+5,W)- (W1*(K-1)/(A-1)+5,-B(K)*W2/(6*ABS(B0))+W)
  32. 220 LINE (W1*(J-A-1)/(A-1)+7,W)- (W1*(J-A-1)/(A-1)+7,-B(J)*W2/(6*B0)+W)
  33. 223 LINE -(W1*(J-A-1)/(A-1)+9,-B(J)*W2/(6*B0)+W)
  34. 225  B(K)=A(K):B(J)=A(J):NEXT K:RETURN
  35.        'FASTER REAL-DATA ONLY ENTRY METHOD :----------------------------
  36. 230 CLEAR:CLS:PRINT"FOURIER again-faster REAL data entry.":INPUT "NUMBER OF DATA POINTS=";V:DIM Y(V)
  37. 240 INPUT "MAXIMUM HARMONIC REQUIRED=";H:FOR Z=1 TO V:PRINT"Y";Z-1;:INPUT "=";Y(Z):A=A+Y(Z):NEXT Z
  38. 250 A=A/V:DIM A(H),B(H):FOR N=1 TO H:A(N)=0:B(N)=0:FOR X=1 TO V
  39. 260 A(N)=A(N)+Y(X)*COS(2*N*3.141593#*(X-1)/V)
  40. 270 B(N)=B(N)+Y(X)*SIN(2*N*3.141593#*(X-1)/V):NEXT X:A(N)=2*A(N)/V:B(N)=2*B(N)/V:NEXT N
  41. 280 CLS:PRINT"COEFFICIENTS of A(N),B(N) in COS(NwT),SIN(NwT) for HARMONIC  N:":PRINT"Ao (DC)=";A
  42. 290 FOR N=1 TO H:PRINT"A";N;" COS=";A(N);";";
  43. 300 PRINT TAB(32);"B";N;" SIN=";B(N):NEXT N
  44. 310 INPUT "PRESS RETURN TO END";C$:END
  45.          MACINTOSH LISTING.
  46.